package com.yimi.yinhepda.utils;

import java.math.BigDecimal;

/**
 * @author Liqingwen
 * @date 2016/11/2
 * Double 精确运算类
 */
public class BigDecimalUtils {

  /**
   * 进行加法运算
   */
  public static double add(double d1, double d2) {
    BigDecimal b1 = new BigDecimal(Double.toString(d1));
    BigDecimal b2 = new BigDecimal(Double.toString(d2));
    return b1.add(b2).doubleValue();
  }

  /**
   * 进行减法运算
   */
  public static double sub(double d1, double d2) {
    BigDecimal b1 = new BigDecimal(Double.toString(d1));
    BigDecimal b2 = new BigDecimal(Double.toString(d2));
    return b1.subtract(b2).doubleValue();
  }

  /**
   * 进行乘法运算
   */
  public static double mul(double d1, double d2) {
    BigDecimal b1 = new BigDecimal(Double.toString(d1));
    BigDecimal b2 = new BigDecimal(Double.toString(d2));
    return b1.multiply(b2).doubleValue();
  }

  /**
   * 进行除法运算
   */
  public static double div(double d1, double d2, int len) {
    BigDecimal b1 = new BigDecimal(Double.toString(d1));
    BigDecimal b2 = new BigDecimal(Double.toString(d2));
    if (d2 == 0) {
      return 0;
    }
    return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
  }

  /**
   * 进行四舍五入
   */
  public static double round(double d, int len) {
    BigDecimal b1 = new BigDecimal(Double.toString(d));
    BigDecimal b2 = new BigDecimal(1);
    // 任何一个数字除以1都是原数字
    // ROUND_HALF_UP是BigDecimal的一个常量，
    // 表示进行四舍五入的操作
    return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
  }
}
